Repository navigation
feat(ns-api): add live trace troubleshooting API - #2007
Draft
gsanchietti wants to merge 3 commits into
Draft
gsanchietti wants to merge 3 commits into
gsanchietti wants to merge 3 commits into
Conversation
gsanchietti
force-pushed
the
live_trace
branch
2 times, most recently
from
November 10, 2026 13:16
7534d85 to
9142609
Compare
gsanchietti
force-pushed
the
live_trace
branch
2 times, most recently
from
November 10, 2026 13:53
3bf2808 to
2dd83af
Compare
Tbaile
force-pushed
the
release-8.9.0
branch
from
November 10, 2026 16:51
47c67d2 to
b88f978
Compare
Live trace lists only the connections of one client, so list_connections() now accepts extra conntrack arguments and returns an empty list when conntrack prints nothing. Assisted-by: Claude Code:claude-opus-5-5
Administrators cannot tell which firewall layer blocks a client. ns.livetrace traces one client for a limited time and reports the blocking layer and rule, DNS queries, live connections and routing hints, using nftables tracing and tcpdump. Assisted-by: Claude Code:claude-sonnet-5-5
Build the UI from the nethsecurity-ui firewall_debug branch to test the live trace page. Drop this commit before merging. Assisted-by: Claude Code:claude-fable-5-2
gsanchietti
force-pushed
the
live_trace
branch
from
November 12, 2026 17:14
2dd83af to
5f7dfc1
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
When a client cannot reach something, administrators have to guess which part of the firewall is blocking it. Live trace follows one client IP address for a limited time and reports which layer stopped each new connection: a firewall rule or zone policy, Threat Shield IP (banIP) block lists, DPI (deep packet inspection) rules, the DNS filter or MAC binding. It also lists the client's DNS queries with their result and whether the DNS filter blocks them, its live connections, and routing hints such as a private address sent out to the WAN or a destination with no route.
The new
ns.livetraceAPI (start,stop,status) starts a background collector that marks the first packet of each new connection of the client with nftables tracing, reads the verdicts fromnft monitor traceand DNS traffic fromtcpdump, and writes the results to a state file. Sessions last 10 to 600 seconds, can be filtered by port and protocol, are rate limited, and clean up their nft table and helper processes when they end. The collector reloads its view of the rules when the firewall, banIP or DPI configuration changes during a session. Methods and limitations are documented inpackages/ns-api/README.md.The commit
chore(ns-ui): TEMP build UI from live trace branchbuilds the UI from the nethsecurity-uifirewall_debugbranch, which holds the live trace page, so the image can be tested end to end. It must be dropped before merging.How to test
api-cli ns.livetrace start --data '{"ip": "192.168.100.238", "duration": 120}'api-cli ns.livetrace statuslists each blocked connection with its layer, chain and rule name, the DNS queries withfilteredset for the blocked domain, and the open connectionsfw4 reload) or restart banIP during the session: connections opened afterwards still show the right rule nameapi-cli ns.livetrace stop, thenstatuslists the allowed connections of the session with the rule that accepted them; nons_livetracenft table,nft monitorortcpdumpprocess is leftSee also
Generated by Claude Code:claude-opus-5-5 with nethserver-pr